package simluate

import (
	"math"
	"time"
)

import (
	"math/rand"
)

var rd *rand.Rand

func init() {
	rd = rand.New(rand.NewSource(time.Now().Unix()))
}

func GetRand() int32 {
	return rd.Int31()
}

//bv 变化下限
//tv 变化上限
//value 当前值
//isUp 当前值变化方向
func MakeValue(bv, tv, cur_value float64, isUp bool) (value float64, up bool) {
	//fmt.Println("begin:", bv, tv, cur_value, isUp)
	rval := rd.Int31n(10000)
	argv := (tv-bv)/10 + 0.0001
	//获取变化比
	//每次变化在(tv-bv)*%10
	value = float64(rval%int32((argv*100+1))) / 200
	//fmt.Println(value, rval)
	if isUp {
		// 检查是否越上限
		value += cur_value
		if value > tv {
			//66% 的几率改变方向
			if rval < 6600 {
				isUp = false
			}
		} else {
			//25% 的几率改变方向
			if rval < 2500 {
				isUp = false
			}
		}
	} else {
		//检查是否越下限
		value = cur_value - value
		if value < bv {
			//66% 的几率改变方向
			if rval < 6600 {
				isUp = true
			}
		} else {
			//25% 的几率改变方向
			if rval < 2500 {
				isUp = false
			}
		}
	}

	//在中线附近有30%的几率改变方向
	if math.Abs((bv+argv*5)-value) < argv/2 {
		//fmt.Println("30%")
		//30% 的几率改变方向
		if rval < 3000 {
			isUp = !isUp
		}
	}
	up = isUp
	//fmt.Println("end:", bv, tv, value, isUp)
	return
}
